"""
演示脚本 - 不使用 Live2D 渲染
测试弹幕接收、AI回复和TTS功能
"""

import asyncio
import sys
from pathlib import Path

project_root = Path(__file__).parent
sys.path.insert(0, str(project_root))

from src.utils.config_manager import get_config
from src.utils.logger import get_logger
from src.core.models import DanmakuMessage, MessageType
from src.services.ai_engine import AIDialogueEngine
from src.services.tts_engine import TTSEngine, AudioPlayer


class SimpleDemoSystem:
    """简化演示系统（不含 Live2D）"""
    
    def __init__(self):
        print("=" * 60)
        print("AI虚拟主播系统 - 简化演示模式")
        print("（不含 Live2D 渲染，专注于 AI 和 TTS 功能）")
        print("=" * 60)
        
        # 加载配置
        self.config = get_config()
        self.logger = get_logger()
        
        # 初始化 AI 引擎
        deepseek_config = self.config.get_deepseek_config()
        self.ai_engine = AIDialogueEngine(
            api_key=deepseek_config['api_key'],
            system_prompt=self.config.get_system_prompt(),
            temperature=deepseek_config.get('temperature', 0.8),
            max_tokens=deepseek_config.get('max_tokens', 100)
        )
        print("✓ AI 对话引擎初始化完成")
        
        # 初始化 TTS 引擎
        tts_config = self.config.get_tts_config()
        self.tts_engine = TTSEngine(
            app_id=tts_config['app_id'],
            api_key=tts_config['api_key'],
            secret_key=tts_config['secret_key'],
            per=tts_config.get('per', 4),
            spd=tts_config.get('spd', 5),
            pit=tts_config.get('pit', 5),
            vol=tts_config.get('vol', 8)
        )
        print("✓ TTS 语音引擎初始化完成")
        
        # 初始化音频播放器
        self.audio_player = AudioPlayer()
        print("✓ 音频播放器初始化完成")
        
        print("\n系统初始化完成！\n")
    
    def process_message(self, username: str, content: str):
        """处理单条消息"""
        print("-" * 60)
        print(f"📨 收到消息: [{username}] {content}")
        
        try:
            # 1. 生成 AI 回复
            print("🤖 AI 思考中...")
            response = self.ai_engine.generate_reply(content, username)
            print(f"💬 AI 回复: {response.text}")
            print(f"😊 情感状态: {response.emotion.value}")
            
            # 2. 合成语音
            print("🎤 合成语音中...")
            audio, lipsync_data = self.tts_engine.synthesize(response.text)
            
            if audio:
                duration = self.tts_engine.get_audio_duration(audio)
                print(f"✓ 语音合成成功 (时长: {duration:.2f}秒)")
                
                # 3. 播放语音
                print("🔊 播放语音...")
                self.audio_player.play_with_lipsync(audio, lipsync_data)
                print("✓ 播放完成")
            else:
                print("❌ 语音合成失败")
            
        except Exception as e:
            print(f"❌ 处理失败: {e}")
            import traceback
            traceback.print_exc()
    
    def interactive_demo(self):
        """交互式演示"""
        print("=" * 60)
        print("交互式演示模式")
        print("输入消息模拟弹幕，输入 'quit' 退出")
        print("=" * 60)
        print()
        
        while True:
            try:
                user_input = input("请输入消息 (或输入 quit 退出): ").strip()
                
                if user_input.lower() == 'quit':
                    print("\n再见！👋")
                    break
                
                if not user_input:
                    continue
                
                # 模拟用户名
                username = "观众" + str(hash(user_input) % 1000)
                
                # 处理消息
                self.process_message(username, user_input)
                print()
                
            except KeyboardInterrupt:
                print("\n\n检测到中断信号，退出演示...")
                break
            except Exception as e:
                print(f"❌ 错误: {e}")
    
    def auto_demo(self):
        """自动演示模式"""
        print("=" * 60)
        print("自动演示模式")
        print("=" * 60)
        print()
        
        # 预设的测试消息
        test_messages = [
            ("小明", "主播你好呀！"),
            ("小红", "今天天气真不错"),
            ("游客123", "能给我唱首歌吗？"),
            ("VIP观众", "你最喜欢什么？"),
        ]
        
        for username, content in test_messages:
            self.process_message(username, content)
            print()
            
            # 等待一段时间
            import time
            time.sleep(2)
        
        print("=" * 60)
        print("自动演示完成！")
        print("=" * 60)


def main():
    """主函数"""
    import sys
    
    # 创建系统实例
    system = SimpleDemoSystem()
    
    # 选择演示模式
    if len(sys.argv) > 1 and sys.argv[1] == "--auto":
        # 命令行指定自动模式
        system.auto_demo()
    else:
        print("请选择演示模式:")
        print("1. 交互式演示（手动输入消息）")
        print("2. 自动演示（预设消息）")
        print("\n提示: 也可以使用命令行参数 --auto 直接运行自动演示")
        
        choice = input("\n请输入选项 (1 或 2, 默认为 2): ").strip()
        
        if choice == "1":
            system.interactive_demo()
        else:
            system.auto_demo()


if __name__ == "__main__":
    main()
